23

» WarCraft 3 / Проблема со способностью

Похожие вопросы:

ответ
у тебя есть несколько проблем:
1)у тебя точка не удаляется и зависает в памяти что даёт утечки(лаги)
2)у тебя не устанавливается группа что даёт утечки(лаги) + нельзя отследить людей в ней
3)у тебя создаётся спецэффект, но не удаляется что даёт утечки(лаги)
Нужно создать переменную типа Отряд(то есть группа):
назвать её допустим GROUP
Нужно создать переменную типа Боевая единица:
назвать её допустим UNIT
нужно сделать так:
в триггере где событие ПРИМЕНЯЕТ СПОСОБНОСТЬ создать действие:
установить применяющий юнит = UNIT
установить FireStrike = случ точка в области Fire strike
установить группу GROUP = юниты в области 300 от Fire strike соответствующий юнит не равно UNIT
создать эффект
удалить эффект
call RemoveLocation(udg_FireStrike)
call DestroyGroup(udg_GROUP)
ответ
В предмете ID кулдауна разный ставьте.
ответ
nvc123:
Bornikkeny, сделал специально чтобы доказать тебе что ты несёшь бред
даже 2 скрина приложил
думаю закинуть библиотеки сможешь сам (в папку *твой jngp*\AdicHelper\lib)
Хорошо группы реализуешь как альтернативу unit[array]. Я тоже самое получил.
nvc123, и всё же твой хук не тот что мне нужен.
Я решил проблему, спасибо что дал идею обрабатывать движение внутри структуры, а не в стеке.
кот
library Hook initializer Init_Hook uses LibMath

globals
    mhook   ahook[100]
    integer ihook = -1
endglobals
    
struct mhook
        unit       host = null
        unit       target = null
        real       face = 0
        real       speed = 0
        real       dis = 0
        real       dismax = 0
        integer    chaini = 0
        unit       chain[50]
        real       scale = 0
        integer    move = 1
        integer    i = 0
		
		
        static method Create takes unit host, real tx, real ty, real scale returns mhook
        local mhook h = mhook.create()
        local integer i = GetPlayerId(GetOwningPlayer(host))
        local real x = GetUnitX(host)
        local real y = GetUnitY(host)
        local real f = GetAngleXY(x,y,tx,ty)
            set h.host = host
            set h.face = f
            set h.speed = 600
            set h.dismax = 1400
            set h.scale = scale
            set h.chain[0] = CreateUnit(Player(i),'h007',GetPolarX(GetUnitX(host),f,h.scale/2),GetPolarY(GetUnitY(host),f,h.scale/2),f)
            set h.i = i
            call UnitAddAbility(h.chain[0],'Amrf')
            call UnitAddAbility(h.chain[0],'Amrf')
            call SetUnitFlyHeight(h.chain[0],50,0)
            call SetUnitPathing(h.chain[0],false)
            return h
        endmethod
        
        method Start takes nothing returns boolean
            if ihook < 1000 then  
                set ihook = ihook + 1
                set ahook[ihook] = this
                return true
            else
                return false
            endif
        endmethod
        
        method Destroy takes nothing returns nothing
        local integer i = 0
            loop
            exitwhen i > ihook
                if ahook[i] == this then
                    set ahook[i] = ahook[ihook]
                    set ahook[ihook] = 0
                    set ihook = ihook - 1
                    set i = ihook // выход из цикла
                endif
            set i = i + 1
            endloop
            set this.target = null
            set this.host = null
            call this.destroy()
        endmethod
        
        method Move takes nothing returns nothing
        local integer i1 = 0
        local integer l = 0
        local real x
        local real y
        local real xh
        local real yh
        local real f
            if move == 1
                set dis = dis + speed*0.025
                loop
                 exitwhen i1 > .chaini
                    set x = GetUnitX(.chain[i1])
                    set y = GetUnitY(.chain[i1])
                    if i1 > 0 then
                        set f = GetAngleXY(x,y,GetUnitX(.chain[i1-1]),GetUnitY(.chain[i1-1]))
                        call SetUnitX(.chain[i1],GetPolarX(x,f,.speed*0.025))
                        call SetUnitY(.chain[i1],GetPolarY(y,f,.speed*0.025))
                    else    
                        set f = face
                        call SetUnitX(chain[i1],GetPolarX(x,f,.speed*0.025))
                        call SetUnitY(chain[i1],GetPolarY(y,f,.speed*0.025))
                    endif
                    call SetUnitFacing(chain[i1],f)
                 set i1 = i1 + 1
                endloop
                set x = GetUnitX(chain[chaini])
                set y = GetUnitY(chain[chaini])
                set f = GetAngleXY(GetUnitX(.host),GetUnitY(.host),x,y)
                set xh = GetPolarX(GetUnitX(.host),f,.scale/2)
                set yh = GetPolarY(GetUnitY(.host),f,.scale/2)
                //Create==================
                
                if GetDisXY(xh,yh,x,y) >= .scale/2 then
                    set chaini = chaini + 1
                    set chain[chaini] = CreateUnit(Player(.i),'h007',xh,yh,f)
                    call UnitAddAbility(.chain[.chaini],'Amrf')
                    call UnitAddAbility(.chain[.chaini],'Amrf')
                    call SetUnitFlyHeight(.chain[.chaini],50,0)
                endif
                if dis > dismax then
                    set move = 0
                endif
            else
                //REVERSE=============
                set xh = GetUnitX(host)
                set yh = GetUnitY(host)
                set chain[chaini+1] = host
                loop
                exitwhen l > chaini
                        set x = GetUnitX(chain[l])
                        set y = GetUnitY(chain[l])
                        //if chain[chaini] == null then
                        //    set f = GetAngleXY()
                        //endif
                        set f = GetAngleXY(x,y,GetUnitX(chain[l+1]),GetUnitY(chain[l+1]))
                        call SetUnitX(chain[l],GetPolarX(x,f,speed*0.025))
                        call SetUnitY(chain[l],GetPolarY(y,f,speed*0.025))
                        call SetUnitFacing(chain[l],f-180)
                set l = l + 1
                endloop
                //Destroy==================
                set x = GetUnitX(chain[chaini])
                set y = GetUnitY(chain[chaini])
                set xh = GetUnitX(host)
                set yh = GetUnitY(host)
                if GetDisXY(GetUnitX(chain[chaini]),GetUnitY(chain[chaini]),GetUnitX(host),GetUnitY(host)) < 100 then
                    call RemoveUnit(chain[chaini])
                    set chain[chaini] = null
                    set chaini = chaini - 1
                    if chaini == -1 then
                        call .Destroy()
                    endif
                endif
            endif
        endmethod
        
endstruct

private function Engine takes nothing returns nothing
local integer i = 0
local mhook h
local group g
local unit t 
    loop
    exitwhen i > ihook
        if ahook[i] != 0 then
            set h = ahook[i]
            //--run--//
            call h.Move()
        else
            set ahook[i] = ahook[ihook]
            set ahook[ihook] = 0
            set ihook = ihook - 1
            set i = i - 1 
        endif
    set i = i + 1
    endloop
    //call DestroyGroup(g)
    set g = null
    set t = null
endfunction

function Trig_HookC_Bool takes nothing returns boolean
    if GetSpellAbilityId() == 'A01D' then //Способность Мясной хук
        return true
    else
        return false
    endif
endfunction

function Trig_HookC_Actions takes nothing returns nothing
local mhook h
    set h = mhook.Create(GetSpellAbilityUnit(),GetSpellTargetX(),GetSpellTargetY(),110)
    call h.Start()
endfunction

function Init_Hook takes nothing returns nothing
local trigger t = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddAction( t, function Trig_HookC_Actions )
    call TriggerAddCondition(t,function Trig_HookC_Bool)
    call TimerStart(CreateTimer(),0.025,true,function Engine)
endfunction

endlibrary
ответ
Просто оставлю это и это здесь

23

» WarCraft 3 / Вопрос по World Editor-у

Похожие вопросы:

ответ
Nirvana мод. Поищи информацию о нём. Там всё чудесно в этом плане вроде как реализовано.
ответ
Во-первых, мешок знаков препинания дарю тебе. Пользуйся на здоровье.
Во-вторых, я так и не уловил суть всего выше сказаного ._.
В-третьих, взломщиков тут не любят. Мы можем научить сделать карту, а по взлому это не к нам.
В-четвертых, если тебе уже кидали программы, но ты не смог ними воспользоватся, то у меня для тебя плохие новости.
В-пятых, повторение одного и того же вопроса много раз обычно карается баном.

23

» WarCraft 3 / Memory Hack

Похожие вопросы:

ответ
ну есть такая возможность
в [[gameClass2]+0x1B4]+0x14 хранится адрес виджета под мышкой. естественно, деревья не в счет, может, только у рабочих они учитываются
RMem(RMem(RMem(gameClass2)+0x1B4)+0x14)==address
ответ
а, я думал, ты хочешь узнать тип объекта по его адресу. конвертировать в джасс сложно, не минуту доставать, позже
globals
integer l__Int2Unit
integer pGetHandleIDStackCounter=GameDLL+0x3A8060//26
integer pConvertAddressToHandleId=GameDLL+0x430C80//26
endglobals
function setInt2Unit takes integer i returns nothing
set l__Int2Unit=i
return Prevents JassHelper from inlining this function
endfunction
function ConvertUnitAddressToHandleID takes integer address returns integer
local integer a=CallThisCallWith1Args(pGetHandleIDStackCounter,RMem(GameState))
return CallThisCallWith3Args(pConvertAddressToHandleId,a,address,0)
endfunction
function Typecast4 takes nothing returns nothing
local unit l__Int2Unit
endfunction
# +nosemanticerror
function I2Unit takes integer i returns unit
call setInt2Unit(ConvertUnitAddressToHandleID(i))
return l__Int2Unit
endfunction
не забудь уточнить, что ВСЕ используемые здесь адреса НЕ делены на 4, или умножай их сам, если делились. GameState вроде был разделен в паблике.
ответ
спутал, эта фунция прячет хендл, а не рисовку обеспечивает
function IsFlagBitSet takes integer flags, integer bit returns boolean
	if bit!=0 then
		return flags/bit*0x80000000 != 0
	endif
	return false
endfunction

function RMem takes integer addr returns integer
	if addr<0 or addr>0x7FFFFFFF then
		return 0
	endif
	return Memory[addr/4]
endfunction

function AddAlwaysVisibleFlag takes unit u returns nothing
	local integer a=ConvertHandle(u)
	if a>0 and IsFlagBitSet(RMem(a+0x20),0x10)==false then
		call WMem(a+0x20,RMem(a+0x20)+0x10)
	endif
endfunction
вместо юнита можно вроде любой виджет, просто смени входящий тип и проверь
ответ
ClotPh:
Nelloy, ну тебе даже 1000 лвлов бы не хватило? У меня пассивка со 1000 уровнями спокойно прелоадится, очень тупо, значимо влияет на время загрузки карты, но очень легкореализуемо. А вообще при фантазии 100-200 лвлов хватить должно, если прям ппц предельной точности не должно быть.
Ну, офк, если через мемхак разберешься, будет лучше, это так, просто как альтернатива.
Допустим множитель точность 0.01 и шанс с точностью до 1%, 100 лвлов на каждый вариант множителя, от 1.0 до 3.0 нужно 20000 лвлов способности
Так что нет, спасибо
Вот именно предложенную тобой альтернативу решил переделать))
Стоит выложить наработку по генерации рельефа с помощью шумов Перлина?
Ничего особо примечательного там нет, и не подготовлена как наработка.
Спасибо велосипеду, разобрался. xgm.guru/p/wc3/181566

23

» WarCraft 3 / MPQ архивы Warcraft 3

Похожие вопросы:

ответ
Tand, под кодировкой я имею в виду кодировку. Есть такая штука, определяет какими комбинациями нулей и едениц в бинарном виде кодируется каждый символ. Если при сохранении использована не та кодировка, которую понимает игра, то игра, соответственно, неможет сопоставить нулям и еденицам из файла конкретные символы, а значит ничего не показывает или показывает совсем не то, что было написано изначально.
Скачай Notepad++ -встроенные в винду средства годятся разве что заметки о жизни офисного планктона писать.
ответ
советую переименовать модель\заребутить комп
текстуры стандартные юзал, я так понимаю
ответ
Артес Менетил, для начал в задницу яндекс - трешак еще тот, используй гугл. А дальше слушай, напрямую конвертера в MDX с дренора не существует, Импортируй M2 в макс скриптом, потом экспортируй в MDX и используй, экспортировать можешь скрипом экспорта в MDX и вручную добавить материалы в W3ME. Оба скрипта есть на сайте, если тебе нужны юниты с анимациями - тут нужно с бубном поплясать и методами, которых я не знаю, либо скачать плагин NeoDex с хайва и экспортировать через него со всеми прекрасностями, но там тоже нужно будет настраивать, читай гайды на том же хайве, только учти, что они все не на русском
Извлечь м2 можешь программами работающими с новым форматом архивов CASCExplorer или CASCViewer
ответ
У твоей модели, которая добавляется, вероятно есть нестандартные текстуры. Нужно правильно расположить модель относительно ее текстур. Насколько я помню, я их располагал в одну папку и, вроде как, работало.

23

» WarCraft 3 / Создание текстового файла

Похожие вопросы:

ответ
Вам сюда, господин хороший. Там есть ответы, практически, на все ваши вопросы.
ответ
юзай прелоад
подробнее в статьях
ответ
Но ведь сами по себе ошибки не происходят.
Причина подобного это А) - невнимательность либо твоя либо автора В) - программное обеспечение
Что бы в дальнейшем все было окей, просто сначала потести карту полностью что бы знать что и как должно быть, а потом вноси изменения, будь внимательней.
Еще советую связаться с автором и поговорить с ним об этой проблеме, или запросить у него еще 1 исходник да бы сверЯться с ним.

23

» WarCraft 3 / Как сделать два типа юнита?

Похожие вопросы:

ответ
решил проблему костылём - дал возможность рабочему строить только башню - шаблонку, которая в свою очередь может улучшаться в две указанные башни. Взаимосвязь поставить только от башни - шаблонки. Лимит поставил на башню шаблонки.
Но тема не закрыта. Хотелось бы узнать можно ли решить проблему без костылей.
ответ
Это баг варика. Когда ты используешь несколько диалогов и показываешь их подряд, название Title надо каждый раз заново создавать. Если бы у тебя был один диалог и ты бы его показывал несколько раз подряд - заголовок сохраниться.
Могу посоветовать при пересоздании запускать триггер dialog повторно.
ответ
Ну только триггерные системы отрядов, была такая...
Вот пример ссылочка
Были и другие, поиск в помощь.
Вот еще ссылка

23

» WarCraft 3 / Real или Int

Похожие вопросы:

ответ
Юзай ретурн баг, он снова доступен...
Просто массив целочисленных куда записаны ид code.
Вот ссылочка

23

» WarCraft 3 / Где скачать русификатор

Похожие вопросы:

ответ
Недавно был такой вопрос.
ответ
Подитожим все вышесказанное:
  1. Русификаторы триггеров всегда косячат.
  2. По этой причине часть функций, условий и событий не переведена на русский, либо представляет собой вообще строку без названия.
  3. Оптимальным решением является работа на "чистой" версии редактора с нормально настроенным JNGP.
  4. Обитателям сайта следует быть более вежливыми и терпимыми друг к другу.
ответ
XGM Bot:
Похожие вопросы:

ответ
Недавно был такой вопрос.
ответ
Подитожим все вышесказанное:
  1. Русификаторы триггеров всегда косячат.
  2. По этой причине часть функций, условий и событий не переведена на русский, либо представляет собой вообще строку без названия.
  3. Оптимальным решением является работа на "чистой" версии редактора с нормально настроенным JNGP.
  4. Обитателям сайта следует быть более вежливыми и терпимыми друг к другу.


23

» WarCraft 3 / Структура

Похожие вопросы:

ответ
можно писать до тех пор пока не закончится лимит потока (примерно 5000 раз)
но я бы юзал массивы и циклы
нафиг писать 1000 строк кода когда можно написать 5
ответ
сории косяк нашел
ответ
Sergey105, здесь здесь пример со стеком, думаю там есть то, что тебе нужно
ответ
если не обнуляется то значит криво написал
вот тебе простенький пример в виде статьи
si__UnitPolar_I и не надо уменьшать
она увеличивается только в том случае если нету свободных ячеек
каждый раз когда ты вызываешь destroy() появляется свободная ячейка
советую почитать мануал чтобы понять как это работает
ответ
Что-то мне кажется, что 162 - это предел для структур, которые содержат в себе массив, поэтому нужно указывать размер, если ставить внутри структуры массив переменных и при этом данный предел - 162. Компилятор разбивает стандартный массив в размере 8192 на более меньшие части. Например, структура - группа юнитов содержит массив юнитов 20, то для каждой структуры будет выделяться строго 20 ячеек общего массива юнитов в размере 8192.

23

» WarCraft 3 / Где скачать русификатор

Похожие вопросы:

ответ
Недавно был такой вопрос.
ответ
Подитожим все вышесказанное:
  1. Русификаторы триггеров всегда косячат.
  2. По этой причине часть функций, условий и событий не переведена на русский, либо представляет собой вообще строку без названия.
  3. Оптимальным решением является работа на "чистой" версии редактора с нормально настроенным JNGP.
  4. Обитателям сайта следует быть более вежливыми и терпимыми друг к другу.

23

» WarCraft 3 / Способность: ледяная стрела.

Похожие вопросы:

ответ
Это неважно 2 или 8895465, все что вам нужно это отловить урон в 0.0 ед. от лица того кто кастует стрелы или врубил автокаст и атакует, а так же проверить на бафф стрел, если бафф стрел есть и юнит получил 0.00 ед. урона то в него прилетала стрела от автокаста...
ответ
Я сейчас по тихому делаю систему боя и героев под нее. У каждого героя 7 способностей и при прокачке скила открываются еще скилы, которые увеличат мощь данного скила, добавят баф/дебаф, изменит манакост, перезарядку и особая прокачка которая сильно улучшает 1 сторону способности за счет снижения другой
К примеру: способность получает +100% к силе аттаки но нее действует параметр уклонения.
Критический шанс удара спелом повышен, но сила крита снижена и т.д
ответ
Пользователь ledoed взялся за работу.

23

» WarCraft 3 / Невыделяемый юнит

Похожие вопросы:

ответ
Ааа, ну тогда смотри
не_кликабельность Сларка делается так
а - его морфят в юнит без модельки
б - ему дают москитов и отбирают (что бы на него нельзя было кликнуть, но можно было выделить)
в - все события "атакован" приводятся к действию "стоп", если это Сларк
г - аура регена игнорирует то что Сларка видят
у тебя на пути стоит пункт Б, т.к. что бы умные люди не заменяли себе пустую модельку (пункт А) на нормальную и не могли на неё в итоге тыкать... Так что в итоге - ты можешь её заменить, но тыкнуть всё равно не сможешь... шах и мат
ответ
Всё, разобрался, вопрос снимаю)

23

» WarCraft 3 / Есть ли тут утечки?

Похожие вопросы:

ответ
в самой последней строке самой последней функции присваивай какое-то значение глобалке и будет тебе счастье знать, что всё закончилось успешно

23

» WarCraft 3 / Наносящий урон

Похожие вопросы:

ответ
идея неплохая, если не считать, что заклинание будет диспеллить эффект похожего заклинания.
Например если юнит в стане от молота бурь, то молот бурь-даммикаст снимет бафф с него. С кислотной бомбой и т.п. однозначно диспеллит, насчёт молота - скорее всего.
Нет, станы перебивают тока сильный, слабого. Ну или есть большое отличие в уровнях. Аксид бомбы будут перебивать если урон выше, а так просто продливать бафф, чертики тоже самое.
Кстати да, забыл написать, длительность 0.01, бафф сразу же после проверки удаляем.
Если вы юзайте аксид бомбу для нанесения урона, придется наносит урон триггерно.
Кстати, большинство скиллов вроде аксид бомбы или чертика работают так.
Сначала 0.00 ед. урона, после бафф, после урон указанный в поле способности.
Но молот бурь работает иначе, сначала урон указанный в поле способности, после 0.00 ед. урона и бафф стана.
ответ
Объясню, почему я удалил код: после проведённого за кодом времени, я понял, что сильно погорячился, задав такой глупый вопрос. Стоило отдохнуть, проветрить голову, и решение нашлось. Тем, кто столкнулся с хоть самую малость, но похожей проблемой, дам совет: всегда проверяйте соответствия заклинаний, написанных в коде jass (CTRL + D, если кто не знает, как узнать id заклинания) и ,конечно, сам синтаксис. Также посоветую не утраивать "свалку" в коде, как это сделал я. В общем, если кому интересно, как я решил проблему, пишите - расскажу или даже помогу если у вас она схожая.(Всё дело во внимательности)...
Сброшу код триггера таким, каким я его хотел видеть изначально:
function MU_Check_lvl_four takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 4 ) ) then
        return false
    endif
    return true
endfunction

function MU_Check_lvl_three takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 3 ) ) then
        return false
    endif
    return true
endfunction

function MU_Check_lvl_two takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 2 ) ) then
        return false
    endif
    return true
endfunction

function MU_Check_lvl_one takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 1 ) ) then
        return false
    endif
    return true
endfunction

function MU_Second_Conditions takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(GetEventDamageSource(), 'B008') == true ) ) then
        return false
    endif
    if ( not ( GetEventDamageSource() == udg_Akame_Killer ) ) then
        return false
    endif
    return true
endfunction

function MU_Start_Conditions takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(GetAttacker(), 'B008') == true ) ) then
        return false
    endif
    if ( not ( GetAttacker() == udg_Akame_Killer ) ) then
        return false
    endif
    return true
endfunction

function Trig_MU_Conditions takes nothing returns boolean
    if ( not MU_Start_Conditions() ) then
        return false
    endif
    return true
endfunction

function MU_Venum_Check takes nothing returns boolean
    if ( not ( udg_MU_Venum_counter == 2 ) ) then
        return false
    endif
    return true
endfunction

function MU_del takes nothing returns nothing 
    if ( MU_Check_lvl_one() ) then
        call SetPlayerAbilityAvailableBJ( true, 'A00X', GetOwningPlayer(GetEventDamageSource()) )
        call UnitRemoveAbilityBJ( 'A00X', GetEventDamageSource() )
    else
        if ( MU_Check_lvl_two() ) then
            call SetPlayerAbilityAvailableBJ( true, 'A00U', GetOwningPlayer(GetEventDamageSource()) )
            call UnitRemoveAbilityBJ( 'A00U', GetEventDamageSource() )
        else
            if ( MU_Check_lvl_three() ) then
                call SetPlayerAbilityAvailableBJ( true, 'A00Y', GetOwningPlayer(GetEventDamageSource()) )
                call UnitRemoveAbilityBJ( 'A00Y', GetEventDamageSource() )
            else
                if ( MU_Check_lvl_four() ) then
                    call SetPlayerAbilityAvailableBJ( true, 'A013', GetOwningPlayer(GetEventDamageSource()) )
                    call UnitRemoveAbilityBJ( 'A013', GetEventDamageSource() )
                else
                    call DoNothing(  )
                endif
            endif
        endif
    endif
endfunction


function Trig_MU_Actions takes nothing returns nothing
    call DestroyTrigger(udg_MU_trig)
    set udg_MU_Venum_counter = GetRandomInt(1, 5)
    set udg_MU_TG = GetAttackedUnitBJ()
    if ( MU_Venum_Check() ) then
        if ( MU_Check_lvl_one() ) then
        call UnitAddAbilityBJ( 'A00X', udg_Akame_Killer )
        call SetPlayerAbilityAvailableBJ( false, 'A00X', GetOwningPlayer(udg_Akame_Killer) )
    else
        if ( MU_Check_lvl_two() ) then
            call UnitAddAbilityBJ( 'A00U', udg_Akame_Killer )
            call SetPlayerAbilityAvailableBJ( false, 'A00U', GetOwningPlayer(udg_Akame_Killer) )
        else
            if ( MU_Check_lvl_three() ) then
                call UnitAddAbilityBJ( 'A00Y', udg_Akame_Killer )
                call SetPlayerAbilityAvailableBJ( false, 'A00Y', GetOwningPlayer(udg_Akame_Killer) )
            else
                if ( MU_Check_lvl_four() ) then
                    call UnitAddAbilityBJ( 'A013', udg_Akame_Killer )
                    call SetPlayerAbilityAvailableBJ( false, 'A013', GetOwningPlayer(udg_Akame_Killer) )
                else
                    call DoNothing(  )
                endif
            endif
        endif
    endif
    set udg_MU_trig = CreateTrigger()
    call TriggerRegisterUnitEvent( udg_MU_trig, udg_MU_TG, EVENT_UNIT_DAMAGED )
    call TriggerAddCondition( udg_MU_trig, Condition( function MU_Second_Conditions ) )
    call TriggerAddAction( udg_MU_trig, function MU_del )
    else
        call DoNothing(  )
    endif
endfunction

//===========================================================================
function InitTrig_MU takes nothing returns nothing
    set gg_trg_MU = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_MU, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_MU, Condition( function Trig_MU_Conditions ) )
    call TriggerAddAction( gg_trg_MU, function Trig_MU_Actions )
endfunction
Суть триггера:
Имеется способность с четырьмя уровнями. На каждом уровне урон способности разный, а шанс срабатывания всегда 25%. При атаке герой, имеющий такую способность имеет шанс (25%) на отравление противника.
Переменная udg_Akame_killer равносильна GetEventDamageSource()
P.S. Возможно кому-то даже пригодится этот код... Сделан полнейшим неумехой в плане jass, так что не судите строго!
ответ
Буран (цель область), Огненный дождь (цель область), Гроза (цель область) - примеры способностей с целью областью.
Веерный бросок (не требует цели ), Жар преисподней (не требует цели, переключатель), Стальной вихрь ( не требует цели, блокирует способности заклинателя ), - способности не требующие указания цели.
ответ
Скилл заводного гоблина - взорвать, там настраивается урон, аое, и его можно кастануть и он сам активируется при смерти владельца.
ответ
Таймер на юнита + группа, как только таймер юнита ударившего истек удаляем из группы.

23

» WarCraft 3 / Глобальный таймер

Похожие вопросы:

ответ
Вам сюда, господин хороший. Там есть ответы, практически, на все ваши вопросы.
ответ
Diaboliko, xgm.guru/p/blog-nvc123/101422
это про то как вешать всякую фигню на общий таймер
хэш тут нафиг не нужен т.к. таймер 1
ответ
Всё, разобрался, вопрос снимаю)
ответ
глобальный массив не нужен. сохраняй группу в хэш-таблицу на хэндл героя, потом загружай ее когда надо. у каждого героя будет своя группа
вот пример, молот бурь съедает юнита а удар грома ставит всех юнитов обратно

23

» WarCraft 3 / Событие - получает урон

Похожие вопросы:

ответ
Это давно обсуждалось. вопрос удаление события
Создание триггер события — 3 утечки. Стереть переменный триггер, и минус 1. Получается остается 2 утечки.
Вот если удалить юнита (Remove unit), то он стирается из события другого триггера?
Ответ: Да есть способ: вот шпаргалка
ответ
В этой карте есть система отлова урона - магический либо физический. Сделана Бородачом. Оригинальные Орб-эффекты не руинятся.
ответ
Параметры стака ядов с одним и тем же баффом, это нужно чтобы складывались замедлени и\или урон от разных юнитов, или бафф тупо обновлялся.
С одним из параметров яды с разными баффами скатаются независимо, каждый вешает свой бафф. (годная основа для замедляющих способностей)
А игра вылетает из за зацикливания, темболее бафф при удалении и появлении наносит 0.00 ед урона, это так для справки.
ответ
здесь есть
Карта damage detect
ответ
Как вариант, можно найти в системе действия, в которых триггерно наносится урон юниту (потеря жизней), и отлавливать уже оттуда.

23

» WarCraft 3 / Морф удаляет способность с эффектом героя!

Похожие вопросы:

ответ
Custom, Никак, HeroAbilityList низя править во время игры, делайте несколько героев с разными наборами скиллов на изучение, а потом морфите.
Как правильно морфить можно найти инфу тут.
Перед морфом желательно убирать все предметы из инвентаря.

23

» WarCraft 3 / Погодные эффекты

Похожие вопросы:

ответ
Утечки в триггерах, надо код карты исправить.
ответ
Кристофер, честно говоря сам с ними не работал, но на сайте была статья, почитай - самому интересно, что выйдет)Попробую сам может, как время будет
ответ
Maniac_91, область это хэндл а значит утекает
максимального количества областей ограничивается количеством оперативной памяти (до 2 гигов вроде) и максимальным количеством хэндлов (2 в 32 степени)
больше ни чем
EnergyFrost:
Максимум что тебя ожидает- лаги, которые ты получишь из-за утечек, работая с этими областями. Так что старайся не наплодить утечек и все будет окей.
как правило работа со статичными областями не вызывает утечек (если их не копировать)
ограничений на декорации тоже нету к слову (если не юзать устаревший редактор)
ответ
Мне что-то такое помнится, что там вроде возможен только один погодный эффект на область. Попробуй создать ещё одну область и там уже создавай второй дождь.

23

» WarCraft 3 / Проблема с моделью

Похожие вопросы:

ответ
Свершылось... Заработало...
Вот оно.

Описание проверки:
  • проверил в редакторе, он просто вылетает при попытке настройки в РО;
  • переконвертировал в .mdl и осмотрел, все норм;
  • открыл в War3ModelEditore, удалил лишние текстуры, материалы, настроил анимации геосетов;
  • профит.
Если кто не верит, вот скрин.
ответ
У модельки нет анимации смерти - удаляй юнит- Боевая единица А unit dies(умирает) - remove dying unit from the game
ответ
тему можно закрывать. ответ сам нашел.
ответ
советую переименовать модель\заребутить комп
текстуры стандартные юзал, я так понимаю
ответ
Используй GMax, тот же самый 3ds max, только бесплатный.

23

» WarCraft 3 / Memory Hack

Похожие вопросы:

ответ
У меня всё работает, просто прописываю эти нативки в коде самой карты, вот карта, здесь и урон изменяется.
Чтобы typecast работал в JNGP нужно создать аж 3 переменных!
Какие три? Я только две использую:
integer array l__A
integer A
ответ
ну есть такая возможность
в [[gameClass2]+0x1B4]+0x14 хранится адрес виджета под мышкой. естественно, деревья не в счет, может, только у рабочих они учитываются
RMem(RMem(RMem(gameClass2)+0x1B4)+0x14)==address
ответ
а, я думал, ты хочешь узнать тип объекта по его адресу. конвертировать в джасс сложно, не минуту доставать, позже
globals
integer l__Int2Unit
integer pGetHandleIDStackCounter=GameDLL+0x3A8060//26
integer pConvertAddressToHandleId=GameDLL+0x430C80//26
endglobals
function setInt2Unit takes integer i returns nothing
set l__Int2Unit=i
return Prevents JassHelper from inlining this function
endfunction
function ConvertUnitAddressToHandleID takes integer address returns integer
local integer a=CallThisCallWith1Args(pGetHandleIDStackCounter,RMem(GameState))
return CallThisCallWith3Args(pConvertAddressToHandleId,a,address,0)
endfunction
function Typecast4 takes nothing returns nothing
local unit l__Int2Unit
endfunction
# +nosemanticerror
function I2Unit takes integer i returns unit
call setInt2Unit(ConvertUnitAddressToHandleID(i))
return l__Int2Unit
endfunction
не забудь уточнить, что ВСЕ используемые здесь адреса НЕ делены на 4, или умножай их сам, если делились. GameState вроде был разделен в паблике.
ответ
спутал, эта фунция прячет хендл, а не рисовку обеспечивает
function IsFlagBitSet takes integer flags, integer bit returns boolean
	if bit!=0 then
		return flags/bit*0x80000000 != 0
	endif
	return false
endfunction

function RMem takes integer addr returns integer
	if addr<0 or addr>0x7FFFFFFF then
		return 0
	endif
	return Memory[addr/4]
endfunction

function AddAlwaysVisibleFlag takes unit u returns nothing
	local integer a=ConvertHandle(u)
	if a>0 and IsFlagBitSet(RMem(a+0x20),0x10)==false then
		call WMem(a+0x20,RMem(a+0x20)+0x10)
	endif
endfunction
вместо юнита можно вроде любой виджет, просто смени входящий тип и проверь

23

» WarCraft 3 / Обработка предметов

Похожие вопросы:

ответ
аналогичная болезнь ставить несколько антивирусов полагая что они защитят вместе лучше...
  1. используйте что-то одно
  2. ???
  3. профит